﻿// System libraries
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;

// Created libraries
using FrbaBus.Core;

namespace FrbaBus.ListadoEstadistico
{
    public partial class ListadoEstadistico : Form
    {
        public ListadoEstadistico()
        {
            InitializeComponent();
        }

        private void ListadoEstadistico_Load(object sender, EventArgs e)
        {
            System.DateTime moment = Convert.ToDateTime(System.Configuration.ConfigurationManager.AppSettings["Fecha"]);
            DBManager db = new DBManager();
            SqlCommand consulta = new SqlCommand("select min(distinct(YEAR(Fecha_Salida))) from ALL_IN.Puntaje");
            SQLResponse r = db.executeQuery(consulta);
            int menor = (int)r.result.Rows[0][0];
            for (int a = menor; a <= moment.Year ; a++) {
                this.Anio.Items.Add(a.ToString());
            }
            if (menor > moment.Year)
            {
                MessageBox.Show("No existen registros historicos menores a la fecha actual");
                this.Close();
            }
        }

        private void Cerrar_Click(object sender, EventArgs e)
        {
            this.Hide();
        }

        private void Ver_Click(object sender, EventArgs e)
        {
            if (Anio.SelectedItem == null || Semestre.SelectedItem == null || TipoListado.SelectedItem == null) {
                MessageBox.Show("Faltan Datos");
                return;
            }

            String tipo = this.TipoListado.SelectedItem.ToString();
            SQLResponse r;
            DBManager db = new DBManager();
            DateTime fechaDesde;
            DateTime fechaHasta;
            if (Semestre.SelectedItem.ToString() == "1")
            {
                fechaDesde = new DateTime(Int32.Parse(Anio.Text), 1, 1);
                fechaHasta = new DateTime(Int32.Parse(Anio.Text), 6, 30);
            }
            else
            {
                fechaDesde = new DateTime(Int32.Parse(Anio.Text), 7, 1);
                fechaHasta = new DateTime(Int32.Parse(Anio.Text), 12, 31);
            }

            switch (tipo) { 
            
/*
Top 5 de los destinos con más pasajes comprados(LISTO)
Top 5 de los destinos con micros más vacíos (TODO)
Top 5 de los Clientes con más puntos acumulados a la fecha (LISTO)
Top 5 de los destinos con pasajes cancelados(TODO)
Top 5 de los micros con mayor cantidad de días fuera de servicio(TODO)   
 */


                case "Top 5 de los destinos con más pasajes comprados": //LISTO ANDANDO
                    {


                        SqlCommand consulta = new SqlCommand("execute ALL_IN.DestinosConMasPasajesComprados '" 
                            + Anio.Text + "', '"+ Semestre.Text +"'");

                        r = db.executeQuery(consulta);

                        if (r.rowsAffected == 0)
                        {
                            MessageBox.Show("No existen registros");
                            return;
                        }

                        Listado listado = new Listado();
                        listado.SetDataGridView(r.result);
                        listado.Show();

                        return;
                    }


                case "Top 5 de los destinos con micros más vacíos":
                    {

                        SqlCommand consulta = new SqlCommand("execute ALL_IN.DestinosMicrosMasVacios '"
                            + Anio.Text + "', '" + Semestre.Text + "'");

                        r = db.executeQuery(consulta);

                        if (r.rowsAffected == 0)
                        {
                            MessageBox.Show("No existen registros");
                            return;
                        }

                        Listado listado = new Listado();
                        listado.SetDataGridView(r.result);
                        listado.Show();

                        return;
                    }


                case "Top 5 de los Clientes con más puntos acumulados a la fecha"://LISTO ANDANDO
                    {
                        SqlCommand consulta = new SqlCommand
                            ("select top (5) DNI, SUM(Puntos) Puntos from ALL_IN.PuntajesHastalaFecha where cast(fecha_salida AS DATE) between '" 
                            + fechaDesde.ToString("yyyy-MM-dd") 
                            + "' and '" + fechaHasta.ToString("yyyy-MM-dd") + "' group by DNI order by Puntos desc");

                        r = db.executeQuery(consulta);

                        if (r.rowsAffected == 0)
                        {
                            MessageBox.Show("No hay ningun puntaje acumulado");
                            return;
                        }

                        Listado listado = new Listado();
                        listado.SetDataGridView(r.result);
                        listado.Show();

                        return;
                    }

                case "Top 5 de los destinos con pasajes cancelados"://LISTO
                    {


                        SqlCommand consulta = new SqlCommand("execute ALL_IN.pasajesCancelados '"
                            + Anio.Text + "', '" + Semestre.Text + "'");

                        r = db.executeQuery(consulta);

                        if (r.rowsAffected == 0)
                        {
                            MessageBox.Show("No existen registros");
                            return;
                        }

                        Listado listado = new Listado();
                        listado.SetDataGridView(r.result);
                        listado.Show();

                        return;
                    }

                case "Top 5 de los micros con mayor cantidad de días fuera de servicio": //HAGAN DESPUES DE MODIFICAR LA TABLA FUERA DE SERVICIO
                    {


                        SqlCommand consulta = new SqlCommand("execute ALL_IN.mayorCantidadDiasFueraDeServicio '"
                            + Anio.Text + "', '" + Semestre.Text + "'");

                        r = db.executeQuery(consulta);

                        if (r.rowsAffected == 0)
                        {
                            MessageBox.Show("No existen registros");
                            return;
                        }

                        Listado listado = new Listado();
                        listado.SetDataGridView(r.result);
                        listado.Show();

                        return;
                    }










            }
           
        }

        private void Anio_SelectedIndexChanged(object sender, EventArgs e)
        {

        }

    }
}
